EFSマウントヘルパーの利用有無でマウントコマンドの違い等をみてみた
こんにちは、坂巻です。
Amazon Elastic File System(以下、EFS)に関するエントリです。
今回はEFSのマウント方法について、amazon-efs-utilsパッケージに含まれているマウントヘルパーを利用する場合と、そうでない場合の違いを見ていきたいと思います。
EFSの各機能などは、過去のエントリをご確認ください。
マウントヘルパーとは
マウントヘルパーはefsという新しいネットワークファイルシステムタイプを定義します。Linuxの標準的なmountコマンドと完全な互換性があり、EFSをマウントする際は推奨のマウントオプションがデフォルトで含まれています。
また、ログの出力や、転送中データと保存するデータの両方の暗号化を行うことも可能です。詳細については以下をご確認ください。
マウントヘルパーを利用したEFSマウント
amazon-efs-utilsパッケージインストール
マウントヘルパーの利用にはamazon-efs-utilsパッケージが必要になります。 ディストリビューションによって、導入方法が異なりますのでご注意ください。
Amazon Linux系の場合は、パッケージが提供されていますが、 RHEL/Ubuntuなどでは、パッケージを自前でビルドする必要があります。
今回はRed Hat Enterprise Linux 7.5(ami-6b0d5f0d)
を利用していますので、ビルドが必要になります。
Gitインストール
以下のコマンドでGitをインストールします。
$ sudo yum -y install git
amazon-efs-utilsクローン
GitHubのamazon-efs-utilsを任意のディレクトリにクローンします。
$ git clone https://github.com/aws/efs-utils
rpm-buildインストール
rpmパッケージをインストールします。
$ sudo yum -y install rpm-build
ビルド実行
クローンを行ったディレクトリに移動後、次のコマンドを使用してパッケージをビルドします。
$ sudo make rpm
なお、今回利用してたRed Hat Enterprise Linux 7.5(ami-6b0d5f0d)
では、makeがインストール済みでしたが、インストールされていない場合は、sudo yum -y install make
でインストールが必要になります。
amazon-efs-utilsインストール
amazon-efs-utilsパッケージをインストールします。
$ sudo yum -y install ./build/amazon-efs-utils*rpm
インストール確認
インストールが行われたか確認してみます。
$ sudo yum list|grep amazon-efs-utils Failed to set locale, defaulting to C amazon-efs-utils.noarch 1.5-1.el7 installed
EFSマウント
EC2よりEFSをマウントします。マウントヘルパーの利用したEFSのマウントでは、 EFSのファイルシステムIDが必要になりますので、コンソールよりIDを確認します。
IDを確認したところで、マウントを行うEC2にログインします。
マウントポイント作成
EFSをマウントするためのマウントポイントを作成します。
今回は/mnt
配下のefs
ディレクトリをマウントポイントとして利用したいと思います。
$ sudo mkdir /mnt/efs
ファイルシステム確認(マウント前)
マウント前のファイルシステムを確認します。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 10G 1.4G 8.7G 14% / devtmpfs 474M 0 474M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 13M 483M 3% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/1000
マウント実行
以下のコマンドでマウントを行います。
$ sudo mount -t efs fs-0630f027:/ /mnt/efs
マウントヘルパーを利用時は、推奨されるマウントオプションが自動で実施されています。
そのため、オプションの指定はありません。
ファイルシステム確認(マウント後)
マウントが実施できたか確認してみます。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 10G 1.4G 8.7G 14% / devtmpfs 474M 0 474M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 13M 483M 3% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/1000 fs-0630f027.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /mnt/efs
ただしくマウントが行えました。 なお、EFSへのデータ転送時に、データを暗号化する場合、次のコマンドを使用してファイルシステムをマウントする必要があります。
$ sudo mount -t efs -o tls fs-0630f027:/ /mnt/efs
ただし、暗号化を行うためには、stunnelのアップグレード等の対応が必要な場合があります。
詳細については以下をご確認ください。
ログ確認
マウントヘルパーには、EFSのログ記録が組み込まれています。
$ ll /var/log/amazon/efs total 4 -rw-r--r--. 1 root root 921 Oct 25 02:27 mount.log
なお、ログの出力先やサイズの指定は/etc/amazon/efs/efs-utils.conf
で設定が可能です。
設定を確認してみると、ログの最大サイズが制限されているようなので、ログローテ等でケアする必要がなさそうです。
[DEFAULT] logging_level = INFO logging_max_bytes = 1,048,576 logging_file_count = 10 ・ ・ ・
また、設定変更を行った際の反映については、EFSのアンマウント/マウントが必要になりますのでご注意ください。
マウントヘルパーを利用しないEFSマウント
マウントヘルパーを利用せずにEFSをマウントしてみます。 マウントヘルパーを利用しない場合は、EC2にNFSクライアントパッケージが必要になります。
NFSクライアントインストール
以下のコマンドでNFSクライアントをインストールします。
$ sudo yum -y install nfs-utils
EFSマウント
マウント方法は、IPアドレスを指定する方法と、DNS名を使用する方法があります。 EFSをIPアドレスで接続する場合、EC2は接続先と同じアベイラビリティーゾーンのIPを使用してマウントする必要がありますのでご注意ください。
IPアドレスでマウント
コンソールよりIPを確認します。
ファイルシステム確認(マウント前)
マウント前のファイルシステムを確認します。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 10G 1.3G 8.8G 13% / devtmpfs 474M 0 474M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 13M 483M 3% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/1000
マウント実行
以下のコマンドでマウントを行います。 マウントヘルパーを利用した際は指定していなかった推奨オプションを指定しています。
$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 192.168.3.242:/ /mnt/efs
ファイルシステム確認(マウント後)
マウントが実施できたか確認してみます。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 10G 1.3G 8.8G 13% / devtmpfs 474M 0 474M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 13M 483M 3% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/1000 192.168.3.242:/ 8.0E 0 8.0E 0% /mnt/efs
IPアドレスを利用してマウントができました。
DNS名を使用したEFSマウント
DNSホスト名を使用したマウントでは、VPCの「DNS 解決の編集」および「DNS ホスト名の編集」が有効化されている必要があります。
DNS 解決の編集
DNS ホスト名の編集
EFSのDNS名が必要になりますので、コンソールよりDNS名を確認します。
ファイルシステム確認(マウント前)
マウント前のファイルシステムを確認します。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 10G 1.3G 8.8G 13% / devtmpfs 474M 0 474M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 13M 483M 3% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/1000
マウント実行
以下のコマンドでマウントを行います。IPアドレスでのマウント同様、オプションを指定しています。
$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-0630f027.efs.ap-northeast-1.amazonaws.com:/ /mnt/efs
ファイルシステム確認(マウント後)
マウントが実施できたか確認してみます。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 10G 1.3G 8.8G 13% / devtmpfs 474M 0 474M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 13M 483M 3% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/1000 fs-0630f027.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /mnt/efs
ファイルシステムがDNS名になって、マウントされています。
EFSの自動マウント
fstabを使用すると、EC2起動の度に、EFSを自動的にマウントすることができます。/etc/fstab
ファイルに以下を追加します。
fs-0630f027:/ /mnt/efs efs defaults,_netdev 0 0
なお、上記はマウントヘルパーを使用したマウント方法となります。
マウントヘルパーなしでマウントする場合は以下をご確認ください。
ファイルシステム確認
以下のようにマウントされていない状態で、再起動を行ってみました。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 10G 1.4G 8.7G 14% / devtmpfs 474M 0 474M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 13M 483M 3% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/1000 $ sudo reboot now Connection to XX.XX.XX.XX closed by remote host. Connection to XX.XX.XX.XX closed.
再起動後に確認すると、自動でマウントされていることが確認できました。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 10G 1.4G 8.7G 14% / devtmpfs 474M 0 474M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 13M 483M 3% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup fs-0630f027.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /mnt/efs tmpfs 100M 0 100M 0% /run/user/1000
最後に
EFSマウントヘルパーを利用すると、マウントが簡素化されるだけでなく、ログ出力、暗号化等が行えるようになります。 EFSを利用する際に特別な理由がない限りは、マウントヘルパーを使わない手はありませんね!